#ifndef __CONFIG_MODE_H__
#define __CONFIG_MODE_H__
#include "sfsis.h"
#pragma pack(1)
/*每增加一个效果，请在此处添加控制结构体，并添加对应的模式配置参数*/

/*整个灯带显示一种色彩*/
typedef struct //单色模式配置
{
    Color color;
} Config_Mode_Monochrome;

/*彩虹配置,整个灯带滚动类似彩虹*/
typedef struct //彩虹配置
{
    su8 speed;
} Config_Mode_Rainbow;

/*渐变配置，整个灯带颜色变化*/
typedef struct
{
    su8 speed;
}Config_Mode_Shading;
/*呼吸灯效果*/
typedef struct //呼吸灯配置
{
    Color color;
    su8 speed; //呼吸速度
} Config_Mode_Breath;


typedef struct //模式
{
    Color color;
    su8 speed;
    su8 segNumber; //设置段数
} Config_Mode_Shuttle;


typedef struct //闪烁模式
{
    Color color;
    su8 blinkTimes;
    su8 blinkOnTimes;  //最短闪烁间隔为100ms
    su8 blinkOffTimes; //最短闪烁间隔为100ms
} Config_Mode_Blink;

typedef struct //点模式,用来指示灯带的状态
{
    Color color;
    su8 offset;
} Config_Mode_Dot;

typedef struct //屏幕模式
{
    Color dot[8];
} Config_Mode_Screen;

typedef struct //音乐模式
{
    su8 dispMode;
    Color colorL;
    su8 peakL;
    Color colorR;
    su8 peakR;
} Config_Mode_Music;

/*模式配置参数*/
typedef struct
{
    su8 mode; //模式请参考文档
    union
    {
        Config_Mode_Monochrome monochrome;
        Config_Mode_Rainbow rainbow;
        Config_Mode_Breath breath;
        Config_Mode_Shuttle shuttle;
        Config_Mode_Shading shading;
        Config_Mode_Blink blink;
        Config_Mode_Dot dot;
        Config_Mode_Screen screen;
        Config_Mode_Music music;
        
    } context;
} Config_Mode;

typedef union
{
    Config_Mode entity;
    su8 memory[64];
} Config_Mode_u;

typedef enum
{
    CONFIG_MODE_MONOCHROME,
    CONFIG_MODE_RAINBOW,
    CONFIG_MODE_BREATH,
    CONFIG_MODE_SHUTTLE,
    CONFIG_MODE_SHADING,
    //新增加会固化的模式应该在此行以下添加
    
    //新增加会固化的模式应该在此行以上添加
    CONFIG_MODE_MAX_NV_USED,//用来标记作为需要固化的配置文件的已经用掉的值

    CONFIG_MODE_BLINK = 128,//128以上的效果不会固化在默认配置中
    CONFIG_MODE_DOT,
    CONFIG_MODE_SCREEN,
    CONFOG_MODE_MUSIC,
    //新增加非固化的模式应该在此行以下添加
    
    //新增加非固化的模式应该在此行以上添加
    CONFIG_MODE_MAX_NONENV_USED,
    CONFIG_MAX_NOT_VAILED = 0xFF,
}Config_Mode_Type;
#pragma pack()
#endif
